<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
<!-- 
    工程化大概内容：
        Less
        Bootstrap
        ES6
        nodejs
        express
        mongodb
        webpack
        工程化项目
 -->

<script>

// JS数据类型：
// 基本类型：Number  String  Boolean  undefined  null  
// 引用类型：Object（[] {} function）

// typeof运算符的返回值：字符串
// 'number'  'string'  'boolean'  'undefined'  'object'  'function'
// []  {}  null -> 'object'
// 在JS中函数是一等公民

// JS中所有数据转为布尔值：
// ''  0  NaN  false  undefined  null 转为 false，其他都是true
// if ([]) {
//     console.log( 123 );
// }

// var res = 12 + 2 + '12' - 2 * 2;
         //   14 + '12' - 2 * 2;
         //      '1412' - 2 * 2;
         //      '1412' - 4;
         //      1408
// console.log( res );// 1408

// window对象有一个name属性，默认值为''
// name属性的值只能是字符串（自动转成字符串）
// window = {
//     name: ''
// }
// var name = 5;
// console.log( name + 20 );// '520'
// console.log( '5' + 20 );// '520'

// JS中访问对象成员/属性的两种方式：
var obj = {
    name: '红浪漫',
    age: 40,
    sex: '妖',
    123: 'hello'
}
// console.log( obj.name );// '红浪漫'
// console.log( obj['name'] );// '红浪漫'
// var x = 'age';
// console.log( obj.x );// undefined
// console.log( obj['x'] );// undefined
// console.log( obj[x] );// 40
// console.log( obj['age'] );// 40


// JS中的对象的属性名只能是字符串（自动转换）
// console.log( ({abc:123}).toString() );// '[object Object]'

var obj1 = {};
var a = {x:1};
var b = {x:2};
obj1[a] = '张三';
// obj1[a] -> obj1[{x:1}] -> obj1[String({x:1})] -> obj1['[object Object]'] = '张三'
obj1[b] = '李四';
// obj1[b] -> obj1[{x:2}] -> obj1[String({x:2})] -> obj1['[object Object]'] = '李四'
console.log( obj1[a] );// '李四' 
console.log( obj1[b] );// '李四'   
console.log( obj1['[object Object]'] );// '李四'

</script>
</body>
</html>